<?php

	require_once('../utils.php');
	require_once('../ORMCuentaBanco.php');
	require_once('../ORMBanco.php');
	require_once('../Excel.php');

	session_start();

	switch ($_REQUEST['op'])
	{
		// -------------------------------------------------------
		case 'agregar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'cuenta' => array(
					'obligatorio' => array(true, 'Escriba el número de cuenta.'),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.'),
					'max_longitud' => array (10, 'Máximo son 10 carácteres.')
				),

				'banco' => array(
					'obligatorio' => array(true, 'Seleccione el banco.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'inicial' => array(
					'obligatorio' => array(true, 'Especifique el saldo inicial.'),
					'numerico' => array('Se esperaba un valor numérico')
				)
			));

			$e = ORMCuentaBanco::GuardarCuentaBanco ($in['cuenta'], $in['banco'], $in['inicial'], $in['inicial']);
			if ($e === true) break;

			if (strpos ($e, 'pk_cuentabanco') !== false)
				reterr (E_ERROR_PROC, 'El número de cuenta seleccionado ya existe.');
			else
				reterr (E_ERROR_PROC, 'Error: ' . $e);

			break;

		// -------------------------------------------------------
		case 'eliminar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'cuenta' => array(
					'obligatorio' => array(true, 'Escriba el número de cuenta.'),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.'),
					'max_longitud' => array (10, 'Máximo son 10 carácteres.')
				)
			));

			ORMCuentaBanco::EliminarCuentaBanco ($in['cuenta']);
			break;

		// -------------------------------------------------------
		case 'contar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'cuenta' => array(
					'obligatorio' => array(false),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.')
				),

				'banco' => array(
					'obligatorio' => array(false),
					'numerico' => array('Se esperaba un valor numérico')
				)
			));

			resp('total', ORMCuentaBanco::ContarCuentasBanco($in['cuenta'], $in['banco']));
			break;

		// -------------------------------------------------------
		case 'listar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'offset' => array(
					'obligatorio' => array(true, 'Se requiere el offset a mostrar.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'count' => array(
					'obligatorio' => array(true, 'Se requiere el numero de elementos a mostrar.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'cuenta' => array(
					'obligatorio' => array(false),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.')
				),

				'banco' => array(
					'obligatorio' => array(false),
					'numerico' => array('Se esperaba un valor numérico')
				)
			));

			resp('datos', ORMCuentaBanco::getItems($in['count'], $in['offset'], $in['cuenta'], $in['banco']));
			break;

		// -------------------------------------------------------
		case 'exportar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'offset' => array(
					'obligatorio' => array(true, 'Se requiere el offset a mostrar.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'count' => array(
					'obligatorio' => array(true, 'Se requiere el numero de elementos a mostrar.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'cuenta' => array(
					'obligatorio' => array(false),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.')
				),

				'banco' => array(
					'obligatorio' => array(false),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'full' => array(
					'obligatorio' => array(true, 'Falta parámetro full.'),
					'numerico' => array('Se esperaba un valor numérico')
				)
			));

			if ($in['full'])
			{
				$in['offset'] = 0;
				$in['count'] = $CONFIG['max_export'];
			}

			$data = ORMCuentaBanco::getItems($in['count'], $in['offset'], $in['cuenta'], $in['banco']);

			$fields = array('cuenta', 'banco', 'saldo_ini', 'saldo_act');
			$header = array('Num. de Cuenta', 'Banco', 'Saldo Inicial', 'Saldo Actual');
			$output = array();

			for ($i = 0; $i < sizeof($data); $i++)
			{
				$row = array();

				for ($j = 0; $j < sizeof($fields); $j++)
				{
					$row[] = $data[$i][$fields[$j]];
				}

				$output[] = $row;
			}

			Excel::Exportar('Listado de Cuentas de Banco', $header, $output);
			exit;

			break;

		// -------------------------------------------------------
		case 'actualizar':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			$in = validar ($_REQUEST, array
			(
				'cuenta' => array(
					'obligatorio' => array(true, 'Escriba el número de cuenta.'),
					'pattern' => array('[-A-Za-z0-9]+', 'Solo letras, numeros y guion.'),
					'max_longitud' => array (10, 'Máximo son 10 carácteres.')
				),

				'banco' => array(
					'obligatorio' => array(true, 'Seleccione el banco.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'inicial' => array(
					'obligatorio' => array(true, 'Especifique el saldo inicial.'),
					'numerico' => array('Se esperaba un valor numérico')
				),

				'actual' => array(
					'obligatorio' => array(true, 'Especifique el saldo inicial.'),
					'numerico' => array('Se esperaba un valor numérico')
				)
			));

			$e = ORMCuentaBanco::ActualizarCuentaBanco ($in['cuenta'], $in['banco'], $in['inicial'], $in['actual']);
			if ($e === true) break;

			reterr (E_ERROR_PROC, 'Error: ' . $e);

			break;

		// -------------------------------------------------------
		case 'bancos':
			if (!$_SESSION['autenticado']) reterr (E_ERROR_PROC, 'Se requiere autenticación previa.');
			if ($_SESSION['u']['tipo'] != 1) reterr (E_ERROR_PROC, 'Acceso denegado: Debe ser usuario administrativo.');

			resp('datos', ORMBanco::getBancos());
			break;

		// -------------------------------------------------------
		default:
			if (!$_REQUEST['op'])
				reterr (E_ERROR_PROC, 'Falta código de operación (op).');	
			else
				reterr (E_ERROR_PROC, 'Código de operación no reconocido: ' . $_REQUEST['op']);	

			break;
	}

	ret(E_OK);
